import axios from "axios";
import { ElMessage } from "element-plus";
import config from "@/config";
import { useAllDataStore } from "@/stores"; // 导入 Vuex store 的 hook
import router from '@/router'; // 确保正确导入 router
const service = axios.create({
    baseURL: config.baseApi,
    withCredentials: true, // 添加这一行以允许发送Cookie
});

// 添加请求拦截器
service.interceptors.request.use(
    function (config) {
        // 从 Vuex store 中获取 token
        const store = useAllDataStore();
        const token = store.state.token;
        // 如果存在 token，则添加到请求头中
        if (token) {
            config.headers['token'] = token;
        }
        return config;
    },
    function (error) {
        return Promise.reject(error);
    }
);

// 添加响应拦截器
service.interceptors.response.use(
    (res) => {
        const { code, data, msg } = res.data;
        if (code === 1) {
            return data;
        } else {
            return Promise.reject(new Error(msg));
        }
    },
    (error) => {
        // 检查响应的状态码
        if (error.response && error.response.status === 401) {
            // 401 表示token过期，重定向到登录页面
            ElMessage({
                showClose: true,
                message: '登录过期，请重新登录',
                type: 'error'
            })
            router.push('/login');
        }
        return Promise.reject(error); // 确保返回被拒绝的Promise
    }
);

function request(options) {
    options.method = options.method || "get";
    if (options.method.toLowerCase() === "get" && options.data) {
        options.params = { ...options.params, ...options.data };
    }
    let isMock = config.mock;
    if (typeof options.mock !== "undefined") {
        isMock = options.mock;
    }
    if (config.env !== 'prod') {
        service.defaults.baseURL = isMock ? config.mockAPI : config.baseApi;
    }
    return service(options);
}

export default request;